package cn.jsj.onclock.dao;

import cn.jsj.onclock.pojo.UserEnt;
import cn.jsj.onclock.pojo.identity.UserIdentityEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author 卢斌
 */
@Mapper
public interface UserDao {

    /**
     * Id查询用户信息
     *
     * @param userId    用户Id
     * @return  用户实体
     */
    UserEnt getUserEntityById(@Param("userId") Long userId);


    /**
     * 查询用户权限信息
     *
     * @param userId    用户Id
     * @return  用户权限类型
     */
    UserIdentityEnum getUserIdentity(@Param("userId") Long userId);

    /**
     * 根据OpenId查询用户信息
     *
     * @param openId    小程序登录OpenId
     * @return  用户实体
     */
    UserEnt getUserEntityByOpenId(@Param("openId") String openId);

    /**
     * 新增一个基础用户（用户信息仅包含openId）
     *
     * @param openId    用户实体（实体属性，仅用到openId一个属性）
     */
    void insertBaseUser(@Param("openId") String openId);


    /**
     * 更新用户个人信息
     *
     * @param userEnt   用户信息实体
     * @return  数据库影响条数
     */
    Integer update(UserEnt userEnt);


    /**
     * 检查用户是否在黑名单中
     *
     * @param userId    用户Id
     * @return  用户是否在黑名单中
     */
    Boolean userIsInBlackList(@Param("userId") Long userId);


    /**
     * 更新用户的角色信息
     *
     * @param userId    用户Id
     * @param identity  用户新角色
     */
    void updateUserIdentity(@Param("userId") Long userId, @Param("identity") UserIdentityEnum identity);


    /**
     * 查询用户头像保存的相对位置
     *
     * @param userId    用户id
     * @return  用户头像保存的相对路径
     */
    String getUserHeadPictureLocation(@Param("userId") Long userId);

    /**
     * 更新用户头像保存位置信息
     *
     * @param userId            用户Id
     * @param newFileLocation   新文件保存路径
     */
    void updateUserHeadPictureLocation(@Param("userId") Long userId, @Param("fileLocation") String newFileLocation);


    /**
     * 查询ID名单中的所有用户信息
     *
     * @param userIdList    用户Id列表
     * @return ID名单中的所有用户信息
     */
    List<UserEnt> listUserInfoInIdList(@Param("idList") List<Long> userIdList);


}
